package com.vincent.redispractise.dbClass.service;


import cn.hutool.json.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Set;

@Slf4j
@Service
public class InteractiveService {

    @Resource
    private StringRedisTemplate stringRedisTemplate;

    /* 模拟微信盆友圈点赞的功能
     * 1、每个人只能点赞一次，重复点赞取消点赞
     * 2、点赞排行，有序性
     */
    public void dianzan(Long id,Long userId) {
        //1、判断用户有无点赞，如果没有点赞，就点赞，如果点赞了，就取消点赞
        //为了保证判断和操作的原型性，这里可以不使用锁，记录点赞的数据结构设计为sortSet类型，保证不会重复的同时也保证有序性
        String key = "blog:like:"+id;
        String value = userId.toString();
        Double score = stringRedisTemplate.opsForZSet().score(key, value);
        //存在
        if(score!=null){
            //取消点赞
            stringRedisTemplate.opsForZSet().remove(key,value);
        }else{
//            stringRedisTemplate.opsForZSet().add(key, value, System.currentTimeMillis());
            stringRedisTemplate.opsForZSet().add("key", "value", System.currentTimeMillis());
        }
    }
    /* 查看当前说说的点赞列表，并判断当前用户有无点赞
     *
     */
    public JSONObject dzlb(Long id, Long userId) {
        JSONObject result = new JSONObject();
        String key = "bloglike:"+id;
        Set<String> userIds = stringRedisTemplate.opsForZSet().range(key, 0, 1);
        result.putOnce("likeList",userIds);
        Double score = stringRedisTemplate.opsForZSet().score(key, userId.toString());
        if (score!=null){
            result.putOnce("dz",true);
        }else{
            result.putOnce("dz",false);
        }
        return result;
    }
}
